/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
定义一个队列，往队列中添加左右结点
当队列不空，取出队列中的前两个元素node1,node2进行比较
如果都为空，继续循环
如果有一个为空，另一个不为空，或者两个元素值不相等返回false
将node1->left和node2->right入队
node1->right和node2->left入队

*/
class Solution {
public:
    bool isSymmetrical(TreeNode* root) {
        if(root==nullptr)
            return true;
        queue<TreeNode*>q;
        q.push(root->left);
        q.push(root->right);
        while(!q.empty())
        {
            auto node1=q.front();
            q.pop();
            auto node2=q.front();
            q.pop();
            if(node1==nullptr&&node2==nullptr)
                continue;
            if(node1==nullptr||node2==nullptr||node1->val!=node2->val)
                return false;
            q.push(node1->left);
            q.push(node2->right);
            q.push(node1->right);
            q.push(node2->left);
        }
        return true;
    }

};